/*
 * Projekt: GMU 2013 - Canny hranovy detektor OpenCL/CUDA
 * Autori: Pavel Nevrala - xnevra00 (xnevra00@stud.fit.vutbr.cz)
 *         Martin Jurak - xjurak02 (xjurak02@stud.fit.vutbr.cz)
 */

#pragma once

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <CL/opencl.h>

using namespace cv;
using namespace std;

/*
 * class GaussianMask
 * Trida pro vytvoreni a uchovani Gaussovy masky
 */
class GaussianMask
{
public:
	GaussianMask(void);
	~GaussianMask(void);

	/*
	 * Vytvori linearni Guassovu masku.
	 * Pro OpenCV typu Mat, pro OpenCL pole prvku typu cl_float 
	 * @size - velikost masky
	 * @sigma - odchylka pro Gaussovu masku
	 */
	void createGaussianMask(int size, double sigma);

	/*
	 * Vrati ukazatel na masku datoveho typu Mat pro OpenCV
	 * @return - maska typu Mat
	 */
	Mat* getGaussianMaskCV(){return cv_gaussianMask;};

	/*
	 * Vrati ukazatel na masku datoveho typu cl_float pro OpenCL
	 * @return - maska typu cl_float
	 */
	cl_float* getGaussianMaskCL(){return cl_gaussianMask;};

	/*
	 * Vrati velikost masky
	 * @return - velikost masky
	 */
	int size(){return cv_gaussianMask->rows;};

private:
	// Gaussova maska typu Mat
	Mat* cv_gaussianMask;
	// Gaussova maska typu cl_float
	cl_float* cl_gaussianMask;
};

